package com.season.seasonStudy.javase.j_011_reflect;
import com.season.seasonStudy.javase.entity.Pet;

import java.lang.reflect.Field;
import java.lang.reflect.Method;


public class TestReflect {
	public static void main(String[] args) {
		//建立类的类型(3种方式)
		//1.类名.class
/*		Class c=Pet.class;*/
		Class c = Pet.class;//上面文件不存在，先用这个救救急，利用凡是倒也不需要一个具体的实例
			try {
				//使用反射创建实例，用method的invoke执行方法
				Object o=c.newInstance();
				Method m=c.getMethod("show", new Class[]{int.class,String.class});
				Object[] values={10,"aaaaaaaa"};
				m.invoke(o, values);
				//给属性赋值
				Field f=c.getDeclaredField("pinzhong");
				//私有属性要设置权限
				f.setAccessible(true);
				f.set(o, "拉布拉多");
				Method m1=c.getDeclaredMethod("getPinzhong", null);
				System.out.println(m1.invoke(o, null));
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			} 
		
		//2.对象.getClass
		/*Pet p=new Pet();
		Class c1=p.getClass();*/
		//3.根据路径
		/*try {
			Class c2=Class.forName("aaa.Pet");
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}*/
		
		//获得属性
		/*Field[] fields=c.getDeclaredFields();
		for (Field field : fields) {
			System.out.println("属性名字："+field.getName());
			System.out.println("属性访问修饰符："+Modifier.toString(field.getModifiers()));
			System.out.println("属性类型："+field.getType().getSimpleName());
			System.out.println("--------------------------");
		}
		*/
		//获得方法
		/*Method[] mehtods=c.getDeclaredMethods();
		for (Method method : mehtods) {
			System.out.println("方法访问修饰符："+Modifier.toString(method.getModifiers()));
			System.out.println("方法返回值："+method.getReturnType().getSimpleName());
			System.out.println("方法的名字："+method.getName());
			//获得参数列表
			Class[] cls=method.getParameterTypes();
			for (Class class1 : cls) {
				System.out.println("参数类型："+class1.getName());
			}
			System.out.println("--------------------------");
		}*/
			
		
	}

}
